<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         *  promise对象.then(成功回调,失败的回调)
         * 
         *  p.then 的返回值，
         * 1. 首先是一个promise对象，它的状态和结果值，由他将要执行的成功或失败的回调函数的返回值决定
         * 
         * 2. 成功或失败的回调函数的返回值，如何决定res的状态呢？
         *    2-1. 返回非promise对象，那么res必然是一个成功的promise，成功的结果值就是返回值
         *    2-2. 返回promise对象：你成功我也成功，你成功的结果就是我成功的结果，你失败我也失败，你失败的结果，也是我失败的结果
         *    
         *    2-3. throw：必然是失败Promise，throw的值就是失败的结果值
         * 
         */

        let p = new Promise((resolve, reject)=>{
            resolve('ok');
        })
        let res = p.then(value1=>{
            console.log('1111');
            return value1;
        }, reason1=>{
            console.log('222');
            return reason1;
        })
        .then(value2=>{
            console.log('333');
            return new Promise((resolve, reject)=>{
                reject(value2);
            })
        },reason2=>{
            console.log('4444');
            return new Promise((resolve,reject)=>{
                resolve(reason2);
            })
        })
        .then(value3=>{
            console.log(value3);
        },reason3=>{
            console.log(reason3);
        })
        console.log('res: ', res);

        
    </script>
</body>
</html>